<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
    />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body>
    <button id="btn">点击发送消息</button>
    <script>
      // 难点1：多页签通信
      // 1、我们的xxx后台管理系统，产品的需求是，用户使用的过程中，可能会打开多个浏览器的tab页面
      // 2、需求具体是：在某一个tab页面如果退出登录，其他的tab页面也要退出登录，优化用户体验
      // 3、我们可以使用BroadcastChannel来实现多页签通信
      // 5、BroadcastChannel的使用非常简单，我们只需要new一个BroadcastChannel对象，然后给它传递一个频道名称，就可以创建一个消息通道
      // 6、我们可以使用postMessage方法来发送消息，使用onmessage来接收消息
      // 7、注意：当前页面发送的消息不会触发当前页面的onmessage事件
      // 8、注意：BroadcastChannel的频道名称必须一致，才能实现通信，因为我们可能构建多个消息通道

      // 项目亮点：
      // 无感登录，核心有access_token和refresh_token，第一次登录的时候，接口会返回这两个token，存储起来
      // 1、access_token：有效期为两个小时，每次请求接口都需要携带access_token
      // 2、refresh_token：有效期为7天，当access_token失效时，使用refresh_token调用换区token去换取新的access_token
      // 3、当refresh_token失效时，需要重新登录
      // 具体的处理逻辑：响应拦截器里面
      // 1、判断当前接口是不是返回了401，如果
      // 2、我们会使用第一次登录的时候login接口返回的refresh_token去换取新的access_token，然后更新vuex和localStorage中的access_token
      // 3、我们还要把上一次没有发完的请求继续发完 >> 使用更新之后的最新的accessToken发起接口请求

      // 难点3：table表格树形懒加载的局部刷新
      // 难点4：级联选择框懒加载的数据回显
      // 难点5：element-ui树形节点的拖拽
      // 难点6：大数字的问题 ,json-bigint >> 第三方插件
      // 难点7：大文件上传，断点续传，秒传
      const bc = new BroadcastChannel("heima");
      const btn = document.getElementById("btn");
      btn.addEventListener("click", () => {
        // 当前页面发送的消息不回触发当前页面的onmessage事件
        bc.postMessage("你好");
      });
      // 接收消息
      bc.onmessage = (arg) => {
        console.log(arg);
      };
    </script>
  </body>
</html>
